package fullcalc.operacoes.basica.unaria;

import fullcalc.operacoes.basica.abstrata.AbstractOperacaoUnaria;

/**
 * <p>
 * Classe implementação da operação de Fatorial.
 * </p>
 * 
 * @author Willyan Guimarães Caetano
 */
public class Fatorial extends AbstractOperacaoUnaria {

	private static final double UM = 1.0;

	public Fatorial() {
		super();
	}

	/**
	 * <p>
	 * Sobrescrita do método da classe pai {@link AbstractOperacaoUnaria} para
	 * realização da operação de Fatorial
	 * </p>
	 * 
	 * @param elementoUm
	 *            Primeiro elemento utilizado como operando para executar o
	 *            cálculo
	 * @param elementoDois
	 *            Segundo elemento utilizado como operando para executar o
	 *            cálculo
	 * @see com.google.code.calculadora.beta.operacoes.AbstractOperacaoUnaria#executaOperacao(double)
	 */
	@Override
	public void executaOperacao(double elementoUm) {
		int fatorial = 1;

		if (elementoUm == 0 || elementoUm == 1 || elementoUm < 0) {
			setResultado(UM);
		} else {
			for (int i = 1; i <= elementoUm; i++) {
				fatorial *= i;
			}
		}

		setResultado((double) fatorial);
	}
}
